package leetcode;

import java.util.Scanner;

public class MaximalSquare {

    public int maximalSquare(char[][] matrix){
        if(matrix == null || matrix.length <= 0 || matrix[0].length <=0){
            return 0;
        }
        int m = matrix.length;
        int n = matrix[0].length;
        int[][] dp = new int[m][n];
        int res = 0;
        for(int i = 0; i < m; i++){
            if(matrix[i][0] == 1){
                dp[i][0] = 1;
                res = 1;
            }
        }
        for(int i = 0; i < n; i++){
            if(matrix[0][i] == 1){
                dp[0][i] = 1;
                res = 1;
            }
        }
        for(int i = 1; i < m; i++){
            for(int j = 1; j < n; j++){
                if(matrix[i][j] == 1){
                    dp[i][j] = Math.min(dp[i - 1][j], Math.min(dp[i - 1][j - 1], dp[i][j - 1])) + 1;
                }
                res = Math.max(res, dp[i][j]);
            }
        }
        return res * res;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        char[][] matrix = new char[m][n];
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                matrix[i][j] = (char) sc.nextInt();
            }
        }
        int res = new MaximalSquare().maximalSquare(matrix);
        System.out.println(res);
    }

}
